package net.towee.model.account;

import java.util.Date;
import java.util.List;

import net.towee.model.ProfileContainer;


/**
 * Contains extended information about user.
 * @author  c58
 */
public interface AccountProfile extends ProfileContainer {
	
	/*
	 * Getters
	 */
	AccountIdentity getIdentity();
	Date getDob();
	Gender getGender();
	String getStatus();
	SocialStatus getSocialStatus();
	String getLittleAbout();
	ConnectionsContainer getConnections();

	/*
	 * Setters
	 */
	void setIdentity(AccountIdentity identity);
	void setDob(Date dob);
	void setGender(Gender g);
	void setStatus(String status);
	void setSocialStatus(SocialStatus socstatus);
	void setLittleAbout(String about);
	
	/**
	 * Profile visibility for search 
	 * @return
	 */
	boolean isVisible();
	void setVisible(boolean visible);
	
	/**
	 * @return rules of privacy. Who can view my 
	 * 				profile(group of contacts  or 
	 * 				group of users), and what areas?
	 */
	PrivacyRulesContainer getProfileRules();
	
	/**
	 * Filter profile data for some user, who in some groups and have some identity
	 * @param groups
	 * @param identity
	 */
	void filterProfile(List<AccountGroup> groups, AccountIdentity identity);
	
	/**
	 * Filter profile by rule 
	 */
	void filterProfileForSearch();
	
	/**
	 * Set connections list
	 * @param connections
	 */
	void setConnections(List<Connection> connections);
}
